/******************************************************************************
*
* MODULE:    Leds.v
* DEVICE:     
* PROJECT:   Tarea 2 Diseño Electronico Digital
* AUTHOR:    Ricardo Dávila Castro   
* DATE:      2010 19:35:08
*
* ABSTRACT:  Leds Ejercicio 1
*            
*******************************************************************************/

`ifndef 	LEDS
`define    LEDS


module Leds (
input CLK,
input RST,
input [3:0] SW,
input pshB_Captura,
output [7:0] LED
);

reg [7:0] LED_int =0;  
reg rff_reg;
reg rff_regDos;

wire wCLK; 
reg [1:0]EstadoActual;
reg [1:0]EstadoSiguiente;
//reg [1:0]Inicio;
reg nibble;
reg swicheo=0;


parameter EstadoUno='b0,
		   EstadoDos='b1;

/*
always @ (posedge wCLK)
	begin
		if (RST)
		rff_reg <= 0;
		else if (pshB_Captura)
		rff_reg <= pshB_Captura;
	end
*/
always @ (posedge wCLK , posedge RST)
	begin
		if (RST)
		begin 
			rff_reg <= 0; 
			rff_regDos <= 0;
		end
		else if (pshB_Captura)
			begin
				rff_reg <= pshB_Captura;
				rff_regDos <= rff_reg;
			end
		else
			begin
				rff_reg <= pshB_Captura;
				rff_regDos <= rff_reg;
			end
	end

always @ (posedge rff_regDos)
	begin
		swicheo = ~swicheo; // una ves alto una vez bajo...
		if (nibble)
		begin
			if (swicheo)
				LED_int[3:0] = SW;
				//LED [3:0] = SW;
			else
				LED_int[7:4] = SW;
				//LED [7:4] = SW;	
		end
	end
	
always @ (*)
	begin
		nibble=0;
		case(EstadoActual)
			
			EstadoUno:
				begin 
					 // parte baja
					EstadoSiguiente = EstadoDos;
				end
			EstadoDos:
				begin
					nibble = 1; //parte alta				
					EstadoSiguiente = EstadoUno;
				end
			default:
				EstadoSiguiente = EstadoUno;
		endcase
				
	end	

always @ (posedge CLK)
	begin
		if (RST)
			EstadoActual <= EstadoUno;
		else
			EstadoActual <= EstadoSiguiente;
		
	end

assign LED = LED_int;

clk_divider clkdiv_inst (.clk_50M(CLK),.clk_out(wCLK) );

endmodule

`endif